﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Excel;
using System.IO;
using System.Globalization;
using QLTV_V2.DataAccess;
using QLTV_V2.BussinessLogic;
using QLTV_V2.BussinessObject;

namespace QLTV_V2
{
    public partial class FrmNhapExcel : DevComponents.DotNetBar.Office2007RibbonForm
    {
        public FrmNhapExcel()
        {
            InitializeComponent();
        }
        public string manv;
        ConnectData conn = new ConnectData();
        SachBUS sachBUS = new SachBUS();
        Utilities uti = new Utilities();
        ExportToExcel exp = new ExportToExcel();
        PhieuNhap phieunhap = new PhieuNhap();
        CTPhieuNhap ctPhieu = new CTPhieuNhap();
        DataSet dsSource = null;//Biễn toàn cục chứa dataset đã load
        private void FrmNhapExcel_Load(object sender, EventArgs e)
        {
            //Lấy mã kế tiếp cho Phiếu nhập
            string lastID = uti.GetLastID("PhieuNhap", "MaPhieuNhap", "MaPhieuNhap", "CT-0000");
            string nextID = uti.GetNextID(lastID, "CT-");
            txt_MaPhieuNhap.Text = nextID.ToUpper();
            //Lấy giá trị ngày tháng
            date_NgayNhap.Value = System.DateTime.Now;
            //Load combobox NCC
            DataTable ncc = uti.getDataSource("NhaCungCap", "TenNCC");
            comb_NCC.DataSource = ncc;
            DataRow drNxb = ncc.NewRow();
            drNxb["MaNCC"] = "choose";
            drNxb["TenNCC"] = "Chọn nhà cung cấp";
            ncc.Rows.InsertAt(drNxb, 0);
            comb_NCC.DisplayMember = "TenNCC";
            comb_NCC.ValueMember = "MaNCC";
            comb_NCC.SelectedIndex = 0;
        }

        DataSet GetDatasetFromExcel(string path)
        {
            FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read);
            IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
            excelReader.IsFirstRowAsColumnNames = true;
            DataSet result = excelReader.AsDataSet();
            return result;
        }
        void loadComboBox(DataSet ds)
        {
            foreach (DataTable tbl in ds.Tables)
                comb_Sheet.Items.Add(tbl.TableName);
        }
        private void btn_Chonfile_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog dlg = new OpenFileDialog();
                dlg.Filter = "*.xls|*.xls|*.xlsx|*.xlsx";
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    // dsSource = Import2DataBaseFormExcel(dlg.FileName);
                    dsSource = GetDatasetFromExcel(dlg.FileName);
                    loadComboBox(dsSource);
                    txt_LinkFile.Text = dlg.FileName;
                    comb_Sheet.SelectedIndex = 0;
                }
            }
            catch
            { }
        }

        private void btn_DocDL_Click(object sender, EventArgs e)
        {
            if (comb_Sheet.Text == "")
                return;
            DataTable tbl = dsSource.Tables[comb_Sheet.Text];
            dgv_Sach.DataSource = tbl;
            btn_Luu.Enabled = true;
        }

        private void btn_Luu_Click(object sender, EventArgs e)
        {
            dgv_Sach.CurrentCell = dgv_Sach.Rows[0].Cells[0];
            if (dgv_Sach.Rows.Count - 1 != 0)
            {
                int dem = 0;
                phieunhap = getTT_PhieuNhap();
                if (checkPhieuNhap(phieunhap) == true)
                {
                    if (sachBUS.insertPhieuNhap(phieunhap) == true)
                    {
                        int count = dgv_Sach.Rows.Count - 1;
                        for (int i = 0; i < count; i++)
                        {
                            ctPhieu = getTT_CTPhieuNhap(i);
                            if (checkCTPhieuNhap(ctPhieu) == true)
                            {
                                try
                                {
                                    if (sachBUS.insertCTPhieuNhap(ctPhieu) == true)
                                        dem++;
                                }
                                catch {
                                    DataGridViewRow row = dgv_Sach.Rows[i];
                                    row.DefaultCellStyle.BackColor = Color.Yellow;
                                }
                            }

                        }
                        MessageBox.Show("Nhập thành công " + dem + " quyển sách!", "Thông báo");
                    }
                } 
            }
            else
                MessageBox.Show("Không có dữ liệu", "Thông báo");
        }

        private void btn_Thoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        #region các hàm lấy thông tin, kiểm tra thông tin
        PhieuNhap getTT_PhieuNhap()
        {
            phieunhap.MaPhieuNhap = txt_MaPhieuNhap.Text;
            phieunhap.LyDoNhap = txt_LyDoNhap.Text;
            phieunhap.NgayNhap = date_NgayNhap.Value;
            phieunhap.SoHDCT = txt_SoHD.Text;
            phieunhap.MaNCC = comb_NCC.SelectedValue.ToString();
            phieunhap.MaNV = manv;
            return phieunhap;
        }
        CTPhieuNhap getTT_CTPhieuNhap(int dong)
        {
            ctPhieu.MaPhieuNhap = phieunhap.MaPhieuNhap;
            //
            string lastID = uti.GetLastID_DK("CTPhieuNhap", "MaPhieuNhap", ctPhieu.MaPhieuNhap, "MaCTPhieuNhap", "MaCTPhieuNhap", ctPhieu.MaPhieuNhap + "-0000");
            string nextID = uti.GetNextID(lastID, ctPhieu.MaPhieuNhap + "-");
            ctPhieu.MaCTPhieuNhap = nextID;
            ctPhieu.MaLoaiSach = dgv_Sach.Rows[dong].Cells[1].Value.ToString();
            ctPhieu.TenDauSach = dgv_Sach.Rows[dong].Cells[2].Value.ToString();
            ctPhieu.SoLuongNhap = Convert.ToInt32(dgv_Sach.Rows[dong].Cells[3].Value);
            ctPhieu.DonGia = Convert.ToDouble(dgv_Sach.Rows[dong].Cells[4].Value);
            ctPhieu.BienMuc = false;
            ctPhieu.DKMaCB = false;
            return ctPhieu;
        }

        bool checkPhieuNhap(PhieuNhap phieu)
        {
            if (phieu.LyDoNhap.Equals(""))
            {
                MessageBox.Show("Chưa nhập thông tin phiếu!","Thông báo");
                txt_LyDoNhap.Focus();
                return false;
            }
            if (comb_NCC.SelectedIndex == 0)
            {
                MessageBox.Show("Chưa chọn nhà cung cấp", "Thông báo");
                comb_NCC.Focus();
                return false;
            }
            return true;
        }
        bool checkCTPhieuNhap(CTPhieuNhap ct)
        {
            if (ct.TenDauSach.Equals(""))
            {
                MessageBox.Show("Tên sách không được để trống", "Thông báo");
                return false;
            }
            if (ct.MaLoaiSach == "" || uti.CheckExitsValue("LoaiSach", "MaLoaiSach", ct.MaLoaiSach) == true)
            {
                MessageBox.Show("Mã kho không đúng", "Thông báo");
                return false;
            }
            if (uti.checkDigit(ct.SoLuongNhap.ToString())==false)
            {
                MessageBox.Show("Số lượng nhập không hợp lệ", "Thông báo");
                return false;
            }
            if (uti.checkDigit(ct.DonGia.ToString()) == false)
            {
                MessageBox.Show("Đơn giá nhập không hợp lệ", "Thông báo");
                return false;
            }
            return true;
        }
        #endregion

        private void btn_XuatFile_Click(object sender, EventArgs e)
        {
            DataTable dtb = new DataTable();
            dtb = sachBUS.getSource_FileMau_NhapSach();
            exp.exportExcel_2(dgv_Sach, dtb, 2);
        }
        protected void ExportToExcel(object sender, EventArgs e)
        {
            string sql = "select ROW_NUMBER()over(order by TenDauSach) as 'STT', MaLoaiSach as 'Mã kho',TenDauSach as 'Tên sách',SoLuongNhap as 'Số lượng', DonGia as 'Đơn giá', SoLuongNhap*DonGia as 'Thành tiền' " +
                         "from CTPhieuNhap";
            DataTable dtb = conn.GetDataTable(sql);
            //Tạo gridview
            DataGridView dgv = new DataGridView();
            dgv.DataSource = dtb;
        }

        private void dgv_Sach_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            uti.dgv_GetSTT_RowHeader(sender, e, dgv_Sach);
        }

    }
}
